import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import lombok.SneakyThrows;
import model.User;
import org.apache.poi.ss.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author xueyj
 * @date 2022/8/30 22:02
 * in module easypoi_demo
 */
public class Test {


    /**
     * 创建一个list,用于模仿从数据库中查询出来的数据
     */
    public static List<User> userList() {
        //存放数据的list集合
        List<User> users = new ArrayList<>();
        //构建虚拟数据
        for (int i = 0; i < 15; i++) {
            User user = new User();
            user.setId(String.valueOf(i));
            user.setName("赵云" + i);
            user.setAge(i);
            users.add(user);
        }
        return users;
    }


    public void testExport() throws IOException {
        //获取数据
        List<User> list = userList();
        //将数据导出到Excel
        //参数1:ExportParams对象 参数2:导出的类型  参数3:导出的数据集合
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户信息表", "用户excel表"), User.class, list);
        //渲染别个样式
        renderTable(workbook);
        //使用流将excel写入到指定的位置,指定写出的位置
        FileOutputStream outputStream = new FileOutputStream("C:\\Users\\xueyj\\Desktop\\doc\\easypoi_test.xls");
        //将数据输出
        workbook.write(outputStream);
        //关闭流
        workbook.close();
        outputStream.close();
    }

    private void renderTable(Workbook workbook) {
        //获取sheetAt对象，这里一个sheetAt所以角标是0

        Sheet sheetAt = workbook.getSheetAt(0);

        // 表格行数

        int lastRowNum = sheetAt.getLastRowNum();

        // 获取列数

        int physicalNumberOfCells = sheetAt.getRow(0).getPhysicalNumberOfCells();

        //开始遍历单元格并进行判断是否渲染

        for (int i = 2; i <= lastRowNum; i++) {

            //获取每行对象

            Row row = sheetAt.getRow(i);

            for (int j = 0; j < physicalNumberOfCells; j++) {

                //获取单元格对象

                Cell cell = row.getCell(j);


                //获取单元格样式对象

                CellStyle cellStyle = workbook.createCellStyle();


                //获取单元格内容对象

                Font font = workbook.createFont();

                //一定要装入 样式中才会生效

                cellStyle.setFont(font);


                //获取当前单元格 中的value

                // int score  = Integer.valueOf(map.get(String.valueOf(i - 2)).get(j));

                // 根据条件判断是否改变样式
                if (i < 10 && j >= 2) {

                    //设置单元格背景颜色

                    cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());

                    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

                    //设置单元格字体颜色

                    font.setColor(IndexedColors.YELLOW.getIndex());

                }
                if (i >= 10 &&j <2) {

                    //设置单元格背景颜色

                    cellStyle.setFillForegroundColor(IndexedColors.BLUE.getIndex());

                    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

                    //设置单元格字体颜色

                    font.setColor(IndexedColors.YELLOW.getIndex());

                }

                cell.setCellStyle(cellStyle);

            }
        }
    }

    @SneakyThrows
    public static void main(String[] args) {
        new Test().testExport();
    }

}
